Idiormの使い方 〜データ取得編〜

4958 Views
idiorm
Idiormの使い方 〜データ取得編〜

前回の記事で紹介した内容を使用してデータベースの内容を取得する方法をご紹介したいと思います。

今回はWordPressで作られたサイトのデータベースを取得して行きたいと思います。

SNSでシェア♪

スポンサーリンク

目次

WordPressの記事を10件取得&表示

以下の条件で記事情報を取得したいと思います。

・データベースの$table_prefix名は「wp_」
・最新記事10件
・公開済みの記事のみ
・ポストタイプは「news」
・カスタムフィールド「src」の画像パスを取得
・カスタムフィールド「view」の値を取得

とします。

 

以下のコードで取得&表示が可能です。

<?php
//----------------------------------------------------------------
//ライブラリを読み込む
require_once("idiorm/idiorm.php");
require_once("paris/paris.php");


//----------------------------------------------------------------
//データベースの情報
$db_host     = "データベースのホスト名";
$db_port     = "ポートが必要な場合は記述";
$db_name     = "データベース名";
$db_user     = "データベースのユーザ名";
$db_password = "データベースのパスワード";


//----------------------------------------------------------------
//データベースへ接続
if (!empty($db_port)) {
	//ポートが指定されている場合
	ORM::configure("mysql:host={$db_host};port={$db_port};dbname={$db_name}");
} else {
	//ポートが不要な場合
	ORM::configure("mysql:host={$db_host};dbname={$db_name}");
}
ORM::configure("username",           $db_user);
ORM::configure('password',           $db_password);
ORM::configure('driver_options',     array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'));
ORM::configure('error_mode',         PDO::ERRMODE_WARNING);
ORM::configure('logging',            true);
ORM::configure('caching',            true);	//キャッシュを有効
ORM::configure('caching_auto_clear', true);	//INSERTやUPDATEでキャッシュをクリア


//----------------------------------------------------------------
//取得設定
$table_prefix   = "wp_";
$post_type      = "news";
$posts_per_page = "10";
$post_status    = "publish";


//----------------------------------------------------------------
//記事を取得
$news_posts = ORM::for_table("{$table_prefix}posts")
	->table_alias("p1")
	->select("p1.*")
	->select_expr("p2.guid", "src")
	->select_expr("pm2.meta_value", "view")
	->left_outer_join("{$table_prefix}postmeta", array("p1.ID",          "=", "pm1.post_id"), "pm1")
	->left_outer_join("{$table_prefix}posts",    array("pm1.meta_value", "=", "p2.ID"),       "p2")
	->left_outer_join("{$table_prefix}postmeta", array("p1.ID",          "=", "pm2.post_id"), "pm2")
	->where(array(
		"p1.post_type"   => $post_type,
		"p1.post_status" => $post_status,
		"pm1.meta_key"   => "src",
		"pm2.meta_key"   => "view"
	))
	->order_by_desc("p1.post_date")
	->offset(0)
	->limit($posts_per_page)
	->find_array()
;


//----------------------------------------------------------------
//取得した記事を表示する
if (isset($news_posts) && count($news_posts) > 0) {
	foreach ($news_posts as $v) {
		$post_id = $v['ID'];										//ポストID
		$title   = $v['post_title'];								//タイトルを取得する
		$date    = date("Y.m.d H:i", strtotime($v['post_date']));	//日付を取得
		$content = $v['post_content'];								//本文を取得
		$src     = $v['src'];										//画像パス
		$view    = $v['view'];										//viewの値
		
		echo "
			<article>
				<h1>{$title}</h1>
				<time>{$date}</time>
				<p>あなたは{$view}回目の閲覧者です。</p>
				<div class=\"content\">
					<img src=\"{$src}\" alt=\"\"><br>
					{$content}
				</div>
			</article>
		";
	}
} else {
	echo "指定した条件の記事が取得できませんでした。";
}

以上です!

カスタムフィールドからデータを取得する時は
1.「left_outer_join」でデータを結びつけ
2.「select_expr」でmeta_valueの値に別名をつける
の手順で取得が可能です!

カスタムフィールドの画像を取得する場合は2のステップを無視して
2.「left_outer_join」でmeta_valueを投稿IDに結びつけ
3.「select_expr」でguidの値を別名につける
の手順で取得が可能でした!

公式サイトなどを参考にどんどん使い込んで見てください!

 

まとめ

次は新規追加・更新の紹介ができればと思います。

データベース接続編

SNSでシェア♪

スポンサーリンク

関連記事